/**
 *
 */
package ar.pmt.vista.formularios;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.collections.SortedBag;
import org.apache.struts.util.LabelValueBean;
import org.springframework.beans.factory.BeanFactory;

import ar.pmt.core.constantes.Constantes;
import ar.pmt.core.utiles.BOUtils;
import ar.pmt.modelo.beans.Peticion;
import ar.pmt.modelo.beans.Proyecto;
import ar.pmt.modelo.beans.Recurso;
import ar.pmt.modelo.businessObject.SrvcControlAvance;
import ar.pmt.vista.beans.AvanceBean;
import ar.pmt.vista.beans.ControlAvanceInicialTotalBean;
import ar.pmt.vista.beans.EstimacionBean;
import ar.pmt.vista.beans.IndiceBean;
import ar.pmt.vista.beans.ProyectoBean;
import ar.pmt.vista.beans.RecursoBean;
import ar.pmt.vista.beans.TareaVistaPmtBean;
import ar.pmt.vista.beansComplejos.PeticionBeanOriginal;
import ar.pmt.vista.manager.impl.BeanVistaManager;
import ar.pmt.vista.manager.impl.ControlAvanceManager;

/**
 * @author gburgener
 * Formulario para las pantalla de control de avance, indices y estimaciones y EVA
 *
 */


@SuppressWarnings("serial")
public class ControlAvanceForm extends AbstractValidatorForm {

	/**
	 * proyectos 
	 */
	private Collection<ProyectoBean> proyectos;
	/**
	 * proyecto seleccionado en el combo 
	 */
	private Integer proyectoSel;
	/**
	 * peticiones del combo
	 */
	private Collection<PeticionBeanOriginal> peticiones= new ArrayList<PeticionBeanOriginal>();
	/**
	 * peticion seleccionado en el combo
	 */
	private Integer peticionSel=0;
	/**
	 * recurso  del combo
	 */
	private Collection<RecursoBean> recursos= new ArrayList<RecursoBean>();
	/**
	 * recurso seleccionado
	 */
	private Integer recursoSel;
	/**
	 * control avance de tareas
	 */
	private Collection<TareaVistaPmtBean> controlAvanceTareas;
	/**
	 * unico id de tareas
	 */
	private Collection<LabelValueBean> uidsTareas;
	/**
	 * unico id de tarea seleccionado
	 */
	private String uidTareaSel;
	/**
	 * nombres de las tareas
	 */
	private Collection<LabelValueBean> nombresTareas;
	/**
	 * nombre de la tarea seleccionada
	 */
	private String 	nomTareaSel;
	/**
	 * ids de tareas
	 */
	private Collection<LabelValueBean> idsTareas;
	/**
	 * id de tarea seleccionada
	 */
	private String idTareaSel;
	/**
	 * costo estimado
	 */
	private Collection<LabelValueBean> costosEstimados;
	/**
	 * costo estimado seleccionada1
	 */
	private String costoEstimadoSel;
	/**
	 * costo estimado total
	 */
	private String costoEstimadoTotal;
	/**
	 * esfuerzo estimado total
	 */
	private String esfuerzoEstTotal;
	/**
	 * costo real total
	 */
	private String costoRealTotal;
	/**
	 * avance total
	 */
	private String avanceTotal;
	/**
	 * horas ganadas total
	 */
	private String ganadoHsTotal;
	/**
	 * fecha actual
	 */
	private String fechaActual;
	/**
	 * nombre del proyecto seleccionado
	 */
	private String nombreProyectoSel;
	/**
	 * nombre de peticion seleccionada
	 */
	private String nombrePeticionSel;
	/**
	 * nombre del recurso seleccionado
	 */
	private String nombreRecursoSel;

	/**
	 * indices
	 */
	private Collection<IndiceBean> indices;
	/**
	 * estimaciones
	 */
	private Collection<EstimacionBean> estimaciones;


	/**
	 * Datos de pruba de la DisplayTag...
	 */
	public void datosPrueba() {
		Collection<TareaVistaPmtBean> auxiliar = new ArrayList<TareaVistaPmtBean>();
		Collection<LabelValueBean> auxUid = new ArrayList<LabelValueBean>();
		Collection<LabelValueBean> auxActividad = new ArrayList<LabelValueBean>();
		Collection<LabelValueBean> auxId = new ArrayList<LabelValueBean>();
		Collection<LabelValueBean> auxCosto = new ArrayList<LabelValueBean>();
		for(int x = 0; x < 13; x++) {
			TareaVistaPmtBean tareas = new TareaVistaPmtBean();
			tareas.setUid(1 * x);
			tareas.setActividad("AdministradorPonderadorRiesgosSvcMgr - interfaz e implementacion en blanco");
			tareas.setId(x + 1);
			tareas.setCostoEstimado(new Float(1.3 + x));
			tareas.setEsfuerzo(new Float(0.1 + x));
			tareas.setCostoReal(new Float(2.1 + x));
			tareas.setAvance(50);
			tareas.setGanado(tareas.getCostoEstimado() - x);
			auxiliar.add(tareas);
			auxUid.add(new LabelValueBean(String.valueOf(tareas.getUid()),String.valueOf(tareas.getUid())));
			auxActividad.add(new LabelValueBean(tareas.getActividad(),tareas.getActividad()));
			auxId.add(new LabelValueBean(String.valueOf(tareas.getId()),String.valueOf(tareas.getId())));
			auxCosto.add(new LabelValueBean(String.valueOf(tareas.getCostoEstimado()),
					String.valueOf(tareas.getCostoEstimado())));
		}

		this.setUidsTareas(auxUid);
		this.setNombresTareas(auxActividad);
		this.setIdsTareas(auxId);
		this.setCostosEstimados(auxCosto);

		this.setControlAvanceTareas(auxiliar);
		this.setCostoEstimadoTotal("-3.20");
		this.setEsfuerzoEstTotal("40.00");
		this.setCostoRealTotal("17.80");
		this.setAvanceTotal("80%");
		this.setGanadoHsTotal("15.51");
	}

	/**
	 * @return the controlAvanceTareas
	 */
	public Collection<TareaVistaPmtBean> getControlAvanceTareas() {
		return controlAvanceTareas;
	}

	/**
	 * @param controlAvanceTareas the controlAvanceTareas to set
	 */
	public void setControlAvanceTareas(
			Collection<TareaVistaPmtBean> controlAvanceTareas) {
		this.controlAvanceTareas = controlAvanceTareas;
	}

	/**
	 * @return the costoEstimadoSel
	 */
	public String getCostoEstimadoSel() {
		return costoEstimadoSel;
	}

	/**
	 * @param costoEstimadoSel the costoEstimadoSel to set
	 */
	public void setCostoEstimadoSel(String costoEstimadoSel) {
		this.costoEstimadoSel = costoEstimadoSel;
	}

	/**
	 * @return the costosEstimados
	 */
	public Collection<LabelValueBean> getCostosEstimados() {
		return costosEstimados;
	}

	/**
	 * @param costosEstimados the costosEstimados to set
	 */
	public void setCostosEstimados(Collection<LabelValueBean> costosEstimados) {
		this.costosEstimados = costosEstimados;
	}

	/**
	 * @return the idsTareas
	 */
	public Collection<LabelValueBean> getIdsTareas() {
		return idsTareas;
	}

	/**
	 * @param idsTareas the idsTareas to set
	 */
	public void setIdsTareas(Collection<LabelValueBean> idsTareas) {
		this.idsTareas = idsTareas;
	}

	/**
	 * @return the idTareaSel
	 */
	public String getIdTareaSel() {
		return idTareaSel;
	}

	/**
	 * @param idTareaSel the idTareaSel to set
	 */
	public void setIdTareaSel(String idTareaSel) {
		this.idTareaSel = idTareaSel;
	}

	/**
	 * @return the nombresTareas
	 */
	public Collection<LabelValueBean> getNombresTareas() {
		return nombresTareas;
	}

	/**
	 * @param nombresTareas the nombresTareas to set
	 */
	public void setNombresTareas(Collection<LabelValueBean> nombresTareas) {
		this.nombresTareas = nombresTareas;
	}

	/**
	 * @return the nomTareaSel
	 */
	public String getNomTareaSel() {
		return nomTareaSel;
	}

	/**
	 * @param nomTareaSel the nomTareaSel to set
	 */
	public void setNomTareaSel(String nomTareaSel) {
		this.nomTareaSel = nomTareaSel;
	}

	/**
	 * @return the peticiones
	 */
	public Collection<PeticionBeanOriginal> getPeticiones() {
		return peticiones;
	}

	/**
	 * @param peticiones the peticiones to set
	 */
	public void setPeticiones(Collection<PeticionBeanOriginal> peticiones) {
		this.peticiones = peticiones;
	}

	/**
	 * @return the peticionSel
	 */
	public final Integer getPeticionSel() {
		return peticionSel;
	}

	/**
	 * @param peticionSel the peticionSel to set
	 */
	public final void setPeticionSel(Integer peticionSel) {
		this.peticionSel = peticionSel;
	}

	/**
	 * @return the recursoSel
	 */
	public final Integer getRecursoSel() {
		return recursoSel;
	}

	/**
	 * @param recursoSel the recursoSel to set
	 */
	public final void setRecursoSel(Integer recursoSel) {
		this.recursoSel = recursoSel;
	}

	/**
	 * @return the recursos
	 */
	public Collection<RecursoBean> getRecursos() {
		return recursos;
	}

	/**
	 * @param recursos the recursos to set
	 */
	public void setRecursos(Collection<RecursoBean> recursos) {
		this.recursos = recursos;
	}
	/**
	 * @return the uidsTareas
	 */
	public Collection<LabelValueBean> getUidsTareas() {
		return uidsTareas;
	}

	/**
	 * @param uidsTareas the uidsTareas to set
	 */
	public void setUidsTareas(Collection<LabelValueBean> uidsTareas) {
		this.uidsTareas = uidsTareas;
	}

	/**
	 * @return the uidTareaSel
	 */
	public String getUidTareaSel() {
		return uidTareaSel;
	}

	/**
	 * @param uidTareaSel the uidTareaSel to set
	 */
	public void setUidTareaSel(String uidTareaSel) {
		this.uidTareaSel = uidTareaSel;
	}

	/**
	 * @return the avanceTotal
	 */
	public String getAvanceTotal() {
		return avanceTotal;
	}

	/**
	 * @param avanceTotal the avanceTotal to set
	 */
	public void setAvanceTotal(String avanceTotal) {
		this.avanceTotal = avanceTotal;
	}

	/**
	 * @return the costoEstimadoTotal
	 */
	public String getCostoEstimadoTotal() {
		return costoEstimadoTotal;
	}

	/**
	 * @param costoEstimadoTotal the costoEstimadoTotal to set
	 */
	public void setCostoEstimadoTotal(String costoEstimadoTotal) {
		this.costoEstimadoTotal = costoEstimadoTotal;
	}

	/**
	 * @return the costoRealTotal
	 */
	public String getCostoRealTotal() {
		return costoRealTotal;
	}

	/**
	 * @param costoRealTotal the costoRealTotal to set
	 */
	public void setCostoRealTotal(String costoRealTotal) {
		this.costoRealTotal = costoRealTotal;
	}

	/**
	 * @return the esfuerzoEstTotal
	 */
	public String getEsfuerzoEstTotal() {
		return esfuerzoEstTotal;
	}

	/**
	 * @param esfuerzoEstTotal the esfuerzoEstTotal to set
	 */
	public void setEsfuerzoEstTotal(String esfuerzoEstTotal) {
		this.esfuerzoEstTotal = esfuerzoEstTotal;
	}

	/**
	 * @return the ganadoHsTotal
	 */
	public String getGanadoHsTotal() {
		return ganadoHsTotal;
	}

	/**
	 * @param ganadoHsTotal the ganadoHsTotal to set
	 */
	public void setGanadoHsTotal(String ganadoHsTotal) {
		this.ganadoHsTotal = ganadoHsTotal;
	}

	/**
	 * @return the fechaActual
	 */
	public String getFechaActual() {
		return fechaActual;
	}

	/**
	 * @param fechaActual the fechaActual to set
	 */
	public void setFechaActual(String fechaActual) {
		this.fechaActual = fechaActual;
	}


	/**
	 * @return the proyectos
	 */
	public final Collection<ProyectoBean> getProyectos() {
		return proyectos;
	}

	/**
	 * @param proyectos the proyectos to set
	 */
	public final void setProyectos(Collection<ProyectoBean> proyectos) {
		this.proyectos = proyectos;
	}


	/**
	 * @return the indices
	 */
	public final Collection<IndiceBean> getIndices() {
		return indices;
	}

	/**
	 * @param indices the indices to set
	 */
	public final void setIndices(Collection<IndiceBean> indices) {
		this.indices = indices;
	}

	/**
	 * @return the proyectoSel
	 */
	public final Integer getProyectoSel() {
		return proyectoSel;
	}

	/**
	 * @param proyectoSel the proyectoSel to set
	 */
	public final void setProyectoSel(Integer proyectoSel) {
		this.proyectoSel = proyectoSel;
	}

	/**
	 * @return the nombreProyectoSel
	 */
	public final String getNombreProyectoSel() {
		return nombreProyectoSel;
	}

	/**
	 * @param nombreProyectoSel the nombreProyectoSel to set
	 */
	public final void setNombreProyectoSel(String nombreProyectoSel) {
		this.nombreProyectoSel = nombreProyectoSel;
	}

	/**
	 * @return the nombrePeticionSel
	 */
	public final String getNombrePeticionSel() {
		return nombrePeticionSel;
	}

	/**
	 * @param nombrePeticionSel the nombrePeticionSel to set
	 */
	public final void setNombrePeticionSel(String nombrePeticionSel) {
		this.nombrePeticionSel = nombrePeticionSel;
	}


	/**
	 * @return the nombreRecursoSel
	 */
	public final String getNombreRecursoSel() {
		return nombreRecursoSel;
	}

	/**
	 * @param nombreRecursoSel the nombreRecursoSel to set
	 */
	public final void setNombreRecursoSel(String nombreRecursoSel) {
		this.nombreRecursoSel = nombreRecursoSel;
	}

	/**
	 * @return the estimaciones
	 */
	public final Collection<EstimacionBean> getEstimaciones() {
		return estimaciones;
	}

	/**
	 * @param estimaciones the estimaciones to set
	 */
	public final void setEstimaciones(Collection<EstimacionBean> estimaciones) {
		this.estimaciones = estimaciones;
	}

	/** 
	 * Metodo de carga inicial de pantalla
	 * @param request Request
	 * @param beanFactory inyectar los bean de spring
	 * @throws Exception manejada por aspecto
	 */
	@Override
	public void getLoadForm(HttpServletRequest request, BeanFactory beanFactory) throws Exception {

		SrvcControlAvance srvcControlAvance= (SrvcControlAvance)beanFactory.getBean("srvcControlAvance");
		Collection<Proyecto> proyectos= srvcControlAvance.obtenerProyectos();
		Collection<ProyectoBean> proyectosBean= new ArrayList<ProyectoBean>();
		BeanVistaManager.copiarCollectionBeanModeloToBeanVista(proyectos, proyectosBean, ProyectoBean.class);
		setProyectos(proyectosBean);
		
		ControlAvanceManager controlAvanceManager = (ControlAvanceManager) beanFactory.getBean("controlAvanceManager");
		Collection<ControlAvanceInicialTotalBean> totales = new ArrayList<ControlAvanceInicialTotalBean>();
		ControlAvanceInicialTotalBean total = new ControlAvanceInicialTotalBean();

		request.setAttribute("controlAvances", controlAvanceManager.getAvances(null, null,totales));
		total = (ControlAvanceInicialTotalBean) totales.iterator().next();
		request.setAttribute("totalesAvance", total);

	}


	/** 
	 * Metodo de recarga de pantalla
	 * @param request Request
	 * @param type de Recarga
	 * @param beanFactory inyectar los bean de spring
	 * @throws Exception manejada por aspecto
	 */
	@Override
	public void getReLoadForm(HttpServletRequest request, int type, BeanFactory beanFactory)
	throws Exception {

		SrvcControlAvance srvcControlAvance= (SrvcControlAvance)beanFactory.getBean("srvcControlAvance");
		Proyecto proyecto= srvcControlAvance.obtenerProyecto(getProyectoSel());
		Peticion peticion= srvcControlAvance.obtenerPeticion(getPeticionSel());

		Recurso recurso=null;
		setNombreProyectoSel(proyecto.getNombre());
		if(peticion!=null){
			setNombrePeticionSel(peticion.getNombre());
		}

		if(getRecursoSel()==null || getRecursoSel().equals(0)){
			setNombreRecursoSel(BOUtils.obtenerValorResources(request, "pmt.combos.todos"));

		}
		else{
			recurso= srvcControlAvance.obtenerRecurso(getRecursoSel());
			setNombreRecursoSel(recurso.getNombre()+","+recurso.getApellido());
		}


		SimpleDateFormat sdf = new SimpleDateFormat( Constantes.FORMATO_FECHA );
		switch (type) {	
		case Constantes.RELOADINDICES:				
			Collection<EstimacionBean> estimaciones= new ArrayList<EstimacionBean>();
			Collection<IndiceBean> indicesBean= BeanVistaManager.obtenerIndicesBean(peticion, recurso, 
					request, estimaciones);
			setIndices(indicesBean);
			setEstimaciones(estimaciones);

		case Constantes.RELOADEVA:			
			SortedBag evas=BeanVistaManager.obtenerEvasBean(peticion, recurso, request);
			request.setAttribute("EVAs", evas);

		case Constantes.RELOADCONSULTAR :

			// Obtener combo de proyecto
			Collection<Proyecto> proyectos= srvcControlAvance.obtenerProyectos();
			Collection<ProyectoBean> proyectosBean= new ArrayList<ProyectoBean>();
			Peticion peticionSel=null;		
			BeanVistaManager.copiarCollectionBeanModeloToBeanVista(proyectos, proyectosBean, ProyectoBean.class);
			setProyectos(proyectosBean);

			// obtener combo de peticiones
			Proyecto proyectoSel= srvcControlAvance.obtenerProyecto(getProyectoSel());
			Collection<Peticion> peticiones= proyectoSel.getPeticiones();
			Collection<PeticionBeanOriginal> peticionesBean= new ArrayList<PeticionBeanOriginal>();
			peticionSel= BeanVistaManager.copiarCollectionPeticionToPeticionBean(peticiones, 
					peticionesBean, getPeticionSel());
			setPeticiones(peticionesBean);

			if(peticion!=null){
				// Obtener ultima actualizacion
				setFechaActual(sdf.format( peticionSel.obtenerUltimaActualizacion().getTime() ));

				// Formo la tabla de avance
				ControlAvanceInicialTotalBean totales= new ControlAvanceInicialTotalBean();
				Collection<RecursoBean> recursosBean= new ArrayList<RecursoBean> ();
				Collection<AvanceBean>controlAvance= BeanVistaManager.obtenerAvancesBean(peticion, recurso, 
														request, totales, recursosBean);
				request.setAttribute("controlAvances", controlAvance);
				request.setAttribute("totalesAvance", totales);

				for (Iterator<RecursoBean> iterator = recursosBean.iterator(); iterator
				.hasNext();) {
					RecursoBean recursoBean = (RecursoBean) iterator.next();
					recursoBean.setNombre(recursoBean.getNombre()+" "+ recursoBean.getApellido());

				}
				setRecursos(recursosBean);
			}


		default:
			break;
		}		

	}





}


